package com.itheima.ai.controller;

import com.itheima.ai.entity.vo.MessageVO;
import com.itheima.ai.repository.ChatHistoryRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.messages.Message;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * ChatHistoryController类用于处理与聊天历史记录相关的HTTP请求。
 * 该类通过REST API提供获取聊天会话ID和聊天历史记录的功能。
 */
@RestController
@RequestMapping("/ai/history")
@RequiredArgsConstructor
public class ChatHistoryController {

    // 用于访问聊天历史记录的ChatHistoryRepository实例
    private final ChatHistoryRepository chatHistoryRepository;

    // 用于管理聊天内存的ChatMemory实例
    private final ChatMemory chatMemory;

    /**
     * 根据类型获取聊天会话ID列表。
     *
     * @param type 聊天类型
     * @return 返回指定类型的聊天会话ID列表
     */
    @GetMapping("/{type}")
    public Object getChatIds(@PathVariable("type") String type) {
        return chatHistoryRepository.getChatIds(type);
    }

    /**
     * 根据类型和聊天会话ID获取聊天历史记录。
     *
     * @param type   聊天类型
     * @param chatId 聊天会话的唯一标识符
     * @return 返回指定聊天会话的历史记录，如果不存在则返回空列表
     */
    @GetMapping("/{type}/{chatId}")
    public List<MessageVO> getChatHistory(@PathVariable("type") String type, @PathVariable("chatId") String chatId) {
        // 从聊天内存中获取指定会话ID的消息列表
        List<Message> messages = chatMemory.get(chatId, Integer.MAX_VALUE);
        if (messages == null) {
            return List.of();
        }
        // 将消息列表转换为MessageVO对象列表并返回
        return messages.stream().map(MessageVO::new).toList();
    }
}